<?php if (!defined("DB_PEREFIX")) exit;

global $db, $template, $RUN, $SITE;

// Если страницу открыл зарегистрированный пользователь
if (is_registered()) 
	site_error ( _l('err_registered') );

// Если возможность регистрации отключена
elseif ($SITE['allow_register'] == "no") 
	site_error ( _l('err_reg_notalowed') );

// Начинаем
else 
{
	// Если прислали данные для регистрации
	if (isset($_POST['reg'])) 
	{
		// Обрабатываем полученые данные
		$agree	= $_POST['agree'];
		$nlogin	= strip_tags( xss_clean( trim($_POST['login'])));
		$npass	= strip_tags( xss_clean( trim($_POST['pass1'])));
		$npass2	= strip_tags( xss_clean( trim($_POST['pass2'])));
		$nname	= strip_tags( xss_clean( trim($_POST['name'])));
		$nemail	= strip_tags( xss_clean( trim($_POST['email'])));
	
		if ($_POST['login']	!= '' && 
			$_POST['pass1']	!= '' && 
			$_POST['pass2']	!= '' && 
			$_POST['name']	!= '' && 
			$_POST['email']	!= '') 
		{
			// Обнуляем переменную для хранения ошибок
			$error = '';	
	
			// Обязательно нужно согласиться с правилами сайта
			if ($agree != 'yes') 
				$error .= '<li>'._l('err_rules');
	
			// Проверям имя на диапазон длины
			if (mb_strlen($nname) < 4 || 
				mb_strlen($nname) > 30) 
				$error .= '<li>'._l('err_len_name');

			// Проверям пароль на диапазон длины
			if (mb_strlen($npass) < 4 || 
				mb_strlen($npass) > 16) 
				$error .= '<li>'._l('err_len_pass');

			// Проверям логин на диапазон длины
			if (mb_strlen($nlogin) < 4 || 
				mb_strlen($nlogin) > 16) 
				$error .= '<li>'._l('err_len_login');

			// Проверяем не состоит ли логин только из чисел
			if (is_numeric ($nlogin)) 
				$error .= '<li>'._l('err_nums_login');
				
			// Проверяем состоит ли логин только из цифр и латинских букв
			if (!preg_match("#^[a-zA-Z0-9_-]+$#", $nlogin)) 
				$error .= '<li>'._l('err_alph_login');
				
			// Проверяем состоит ли имя только из букв и цифр
			if (!preg_match("#^[а-яА-ЯЁёa-zA-Z0-9_-]+$#", $nname)) 
				$error .= '<li>'._l('err_alph_name');				
				
			// Проверям совпадают ли пароли
			if ($npass2 != $npass) 
				$error .= '<li>'._l('err_equal_pass');
	
			// Проверяем формат почтового адреса
			if (!eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$",$nemail)) 
				$error .= '<li>'._l('err_email');
			
			// Проверка соответсвия кода с картинки
			if ($_POST['code'] != $_SESSION['secret_code'] || 
				!$_SESSION['secret_code']) 
				$error .= '<li>'._l('err_antibot');		

			// Загружаем пользователей с таким же именем
			$count = $db->fetch_array(
				$db->query ("SELECT COUNT(*) AS name
					FROM ".DB_PEREFIX."_users 
					WHERE user_name = '$nname'"));									
					
			// Проверям дублируется ли имя
			if ($count['name'] > 0) 
				$error .='<li>'._l('err_exist_name');

			// Загружаем пользователей с таким же логином
			$count = $db->fetch_array(
				$db->query ("SELECT COUNT(*) AS login
					FROM ".DB_PEREFIX."_users 
					WHERE user_login = '$nlogin'"));

			// Проверям дублируется ли логин			
			if ($count['login'] > 0) 
				$error .= '<li>'._l('err_exist_login');

			// Загружаем пользователей с таким же email
			$count = $db->fetch_array(
				$db->query ("SELECT COUNT(*) AS email
					FROM ".DB_PEREFIX."_users 
					WHERE user_email = '$nemail'"));

			// Проверям дублируется ли email			
			if ($count['email'] > 0) 
				$error .= '<li>'._l('err_exist_email');

			// Если нет ошибок то добавляем пользователя
			if ($error == '') 
			{
				// Добавляем пользователя с прислаными данными
				$put_user = $db->query("INSERT INTO ".DB_PEREFIX."_users 
					(user_login, user_password, user_name,user_group, user_email, user_date) VALUES 
					('$nlogin', '".expl_hash($npass)."', '$nname', 'user', '$nemail', '".time()."')");
		
				// Если проблем не возникло
				if ($put_user) 
				{	
					// Формируем письмо
					$data = array (
									'name' => $nname,
									'login' => $nlogin,									
									'pass' => $npass,	
									'site' => '<a href="'.$SITE['site_url'] .'">'.$SITE['site_name'] .'</a>',
									);

					// Сохраняем в переменную результат обработки представления	
					$body = load_module_view('user', 'mail/registration', $data, true);
					
					// Выводим сообщени об удачной регистрации	
					site_message ( _l('reg_success') );
			
					// Отсылаем письмо с регистрационными данными
					send_mail ($nemail, _l('registration_on').' "'.$SITE['site_name'].'"', n2br($body));
					
					// Завершаем вывод без отрисовки формы регистрации
					return;
				}
				// Если проблема добавления пользователя в БД
				else 
					site_error ( _l('err_regbd') );
			}
			// Если есть ошибки то отображаем их
			else 
				site_error ($error);

		}
		// Если не все обязательные поля заполнены
		else 
			site_error ( _l('err_fields') );

	}

	// Выводим представление 
	load_module_view('user', 'registration',  array() );
}

?>
